/*
 * @Descripttion: 
 * @version: 
 * @Author: wtzhang
 * @Date: 2021-07-06 14:59:06
 * @LastEditors: wtzhang
 * @LastEditTime: 2021-07-06 15:25:04
 */

(function () {
  console.log("******************* 抽象类 *******************");
  // 父类（抽象类）
  /**
   * 以 abstract 开头的类就是 抽象类
   *  抽象类和其他类区别不大，只是不能用来创建对象
   *  抽象类中可以添加抽象方法
   */
  abstract class Animal {
    name: string;
    constructor(name: string) {
      this.name = name
    }
    /**
     * 定义一个抽象方法
     * 抽象方法使用 abstract 开头 
     * 抽象方法只能定义在抽象类中
     */
    abstract sayhello(): void;
  }
  // const cat = new Animal()
   
  // 子类
  class Dog extends Animal {
    age: number;
    constructor(name: string, age: number) {
      super(name)
      this.age = age
    }
    /**
     * 抽象方法，在继承的子类中必须重写调用
     */
    sayhello() {
      console.log(`${this.name}说：哈喽啊`);
    }
  }
  const dog = new Dog('小黑', 18)
  dog.sayhello()
})()